// pages/login/index.js
import { apiSendEmailVerificationCode, apiLoginByEmail, apiRegisterUserByEmail } from '@/api/user'
import { useErrMessage, useInfoMessage } from '@/utils/message'



Page({
  data: {
    agreement: `第一条 协议确认
    1.1 您在使用广软运动场馆中心服务前，应当仔细阅读本协议的全部条款。
    1.2 点击"同意"按钮即视为您已充分理解并接受本协议的全部内容。
    
    第二条 服务内容
    2.1 本平台提供运动场馆预约、会员管理、活动报名等服务。
    2.2 服务范围以平台实际提供的功能为准。
    
    第三条 用户义务
    3.1 您承诺：
    - 提供真实、准确的注册信息（如邮箱、学号等）
    - 妥善保管账号密码，不得转让或出借
    - 遵守场馆管理规定，不得损坏设施
    
    3.2 禁止行为：
    - 恶意占用预约资源
    - 发布违法信息
    - 干扰系统正常运行
    
    第四条 隐私保护
    4.1 我们承诺：
    - 严格保护您的个人信息
    - 仅收集必要信息（如邮箱、学号）
    - 未经授权不向第三方披露
    
    第五条 免责声明
    5.1 因以下情况导致的服务中断，平台不承担责任：
    - 不可抗力（如自然灾害、网络故障）
    - 用户操作不当造成的损失
    - 第三方服务导致的故障
    
    第六条 协议修改
    6.1 本协议修改后将在平台公示，继续使用服务视为接受修改后的协议。
    
    第七条 法律适用
    7.1 本协议的解释权归广软运动场馆中心所有。
    7.2 如发生争议，应协商解决；协商不成可向平台所在地法院提起诉讼。
    
    我已阅读并同意上述全部条款（2025年3月最新版）`,
    labelEmail: '邮\u00A0\u00A0\u00A0箱', //给t-input的label属性，对齐文本而已，直接写无法转义
    labelPassword: '密\u00A0\u00A0\u00A0码',
    labelNo: '学\u00A0\u00A0\u00A0号',

    navBarHeight: 0,  // 导航栏总高度
    countdown: 0, // 倒计时秒数
    timer: null,    // 定时器
    isPasswordLogin: true,
    isEmail: false, // 检测是不是email
    isSubmit: false,  //是否能提交
    isCheck: false, //是否同意协议
    radioValue: '', //是否同意协议，保存agree
    showAgreement: false,
    passwordVisible: false, //密码是否可见

    email: '',
    password: '',
    no: '',
    username: '',
    code: '',
  },

  // 跳转忘记密码
  forgetPassword() {
    wx.navigateTo({
      url: '/pages/login/forgetPassword/index',
    })
  },

  // 登录
  async login() {
    let msg = ''
    let isOk = false
    let data = ''
    const { email, password, code, no, username } = this.data
    if (this.data.isPasswordLogin) {
      data = await apiLoginByEmail({ email, password })
      if (data.code === 200) {
        msg = "登录成功"
        isOk = true
      } else {
        msg = data.msg
      }
    } else {
      data = await apiRegisterUserByEmail({ email, password, no, username, code, })
      if (data.code === 200) {
        msg = "注册成功"
        isOk = true
      } else {
        msg = data.msg
      }
    }
    if (isOk) {
      // 将登录信息存储
      const { access_token, access_token_expires_at, user } = data.data

      wx.setStorageSync('token', access_token)
      wx.setStorageSync('expire', access_token_expires_at)
      wx.setStorageSync('userInfo', user)

      useInfoMessage(this, msg)
      // 延迟2秒（与Message的duration一致）后跳转

      setTimeout(() => {
        wx.reLaunch({ url: '/pages/index/index' });
      }, 2000);
    } else {
      useErrMessage(this, msg)
    }
  },

  // 发送验证码函数
  handleSendVerifyCode() {
    if (this.data.countdown > 0) return;

    apiSendEmailVerificationCode(this.data.email)
      .then((res) => {
        if (res.code === 200) {
          useInfoMessage(this, "发送成功");
          this.startCountdown(60); // 60秒倒计时
        } else {
          useErrMessage(this, res.msg)
        }
      })
      .catch(err => {
        console.error("发送验证码失败:", err);
      });
  },

  startCountdown(seconds) {
    if (this.data.timer) clearInterval(this.data.timer);

    this.setData({ countdown: seconds });

    const timer = setInterval(() => {
      this.setData({
        countdown: this.data.countdown - 1
      }, () => {
        if (this.data.countdown <= 0) {
          clearInterval(timer);
          this.setData({ timer: null });
        }
      });
    }, 1000);

    this.setData({ timer });
  },

  onUnload() {
    if (this.data.timer) clearInterval(this.data.timer);
  },

  // 是否运行提交
  changeSubmit() {
    const { isPasswordLogin, isCheck, isEmail } = this.data
    const { email, password, code, no, username } = this.data

    if (isPasswordLogin) {
      if (email !== '' && password !== '' && isCheck) {
        this.setData({ isSubmit: true });
      } else {
        this.setData({ isSubmit: false });
      }
    } else if (isEmail && isCheck && code !== '' && no !== '' && username !== '') {
      this.setData({ isSubmit: true });
    } else {
      this.setData({ isSubmit: false });
    }
  },

  // 切换登录方式
  changeLogin() {
    this.setData({ isPasswordLogin: !this.data.isPasswordLogin, isSubmit: false });
  },

  // 显示协议弹窗
  showAgreementModal() {
    this.setData({
      showAgreement: true
    });
  },

  // 隐藏协议弹窗
  hideAgreementModal() {
    this.setData({
      showAgreement: false
    });
  },

  // 同意并关闭
  agreeAndClose() {
    this.setData({
      radioValue: 'agree',
      showAgreement: false,
      isCheck: true,
    });
    this.changeSubmit();
  },
  // 用户协议选择变更
  onCheckChange(e) {
    const { value } = e.detail;
    this.setData({
      radioValue: value,
      isCheck: value === 'agree',
    });
    this.changeSubmit();
  },

  // 密码可见与不可见
  togglePasswordVisibility() {
    this.setData({
      passwordVisible: !this.data.passwordVisible,
    });
  },

  onEmailClear(){
    this.onEmailInput({ detail: { value: '' } });
  },
  onPasswordClear(){
    this.onPasswordInput({ detail: { value: '' } });
  },
  onCodeClear(){
    this.onCodeInput({ detail: { value: '' } });
  },
  onNoClear(){
    this.onNoInput({ detail: { value: '' } });
  },
  onUsernameClear(){
    this.onUsernameInput({ detail: { value: '' } });
  },

  onEmailInput(e) {
    // 邮箱正则表达式（支持大多数常见格式）
    // const isEmail = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(e.detail.value);
    const isEmail = true

    this.setData({
      isEmail,
      email: e.detail.value,
    });
    this.changeSubmit();
  },
  onPasswordInput(e) {
    this.setData({
      password: e.detail.value,  // 更新数据
    });
    this.changeSubmit();
  },
  onCodeInput(e) {
    this.setData({
      code: e.detail.value
    });
    this.changeSubmit();
  },
  onNoInput(e) {
    this.setData({
      no: e.detail.value
    });
    this.changeSubmit();
  },
  onUsernameInput(e) {
    this.setData({
      username: e.detail.value
    });
    this.changeSubmit();
  },

  calculateNavBarHeight() {
    // 获取胶囊按钮信息
    const menuInfo = wx.getMenuButtonBoundingClientRect();
    // 计算导航栏总高度（胶囊高度 + 上下安全距离）
    const navBarHeight = menuInfo.height + (menuInfo.top) * 1.5;

    this.setData({ navBarHeight });
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.calculateNavBarHeight();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})